//引用限定符 public成员函数既可以被左值对象调用，也可以被右值对象调用
#include <iostream>
using namespace std;

class demo {
 public:
  demo(int num) : num(num) {}
  int get_num() { return num; }
  // 限定仅左值对象调用
  int get_lSize() & { return num; }
  // 限定仅右值对象调用
  int get_rCount() && { return num; }
  //左值和右值对象都可以调用
  int get_bytes() const& { return num; }
  //仅供右值对象调用
  int get_rVal() const&& { return num; }

 private:
  int num;
};
int main() {
  demo a(10);
  cout << a.get_num() << endl;
  cout << move(a).get_num() << endl;
  cout << a.get_lSize() << endl;
  cout << move(a).get_lSize() << endl;  // Error
  cout << move(a).get_rCount() << endl;
  cout << a.get_rCount() << endl;  // Error
  cout << a.get_bytes() << endl;
  cout << move(a).get_bytes() << endl;
  cout << a.get_rVal() << endl;  // Error
  cout << move(a).get_rVal() << endl;
  return 0;
}
